#ifndef MAP_H
#define MAP_H

#include <e32std.h>
#include <e32base.h>
    
#define 	MAP_indexSymbol 		"#"

/** 地图默认宽度 */
#define 	MAP_DEFAULT_WIDTH 		320

/** 地图默认高度*/
#define 	MAP_DEFAULT_HEIGHT		320
	
/** 最小的缩放级别 */
#define 	MAP_ZOOM_MIN 			3

/** 最大的缩放级别 */
#define 	MAP_ZOOM_MAX			13

class Map : public CBase
	{
public:
	~Map();
	Map();
    
public:
    /** 地图在不同等别下的比例尺, 单位米 */
    static const int SCALE[] = 
    	{
        1800000,    /* 级别0: 1800公里 */
        800000,     /* 级别1: 800公里*/
        400000,     /* 级别2: 400公里*/
        200000,     /* 级别3: 200公里*/
        100000,     /* 级别4: 100公里*/
        40000,      /* 级别5: 40公里*/
        20000,      /* 级别6: 20公里*/
        10000,      /* 级别7: 10公里*/
        4000,       /* 级别8: 4公里*/
        2000,       /* 级别9: 2公里*/
        1000,       /* 级别10: 1公里*/
        400,        /* 级别11: 0.4公里*/
        200,        /* 级别12: 0.2公里*/
        100         /* 级别13: 0.1公里*/
    	};

private:
	
	/** 地图的宽度*/
	TInt width;
	
	/** 地图的高度*/
	TInt height;
	
	/** 地图缓存的宽度*/
	TInt cacheWidth;	//暂未使用
	
	/** 地图缓存的高度*/
	TInt cacheHeight; //暂未使用
	
	/** 屏幕中心点不同比例下相对于中心经纬度的偏移量*/
	TInt originDX;
	TInt originDY;
	
	/** 上一次的屏幕中心点不同比例下相对于中心经纬度的偏移量*/
	TInt prevOriginDX;
	TInt prevOriginDY;
	
	/** 当前缩放级别 */
	TInt zoom;
	
	/** 缓存切图, 只保留一屏幕的*/
	Hashtable cacheTiles;
	
	   /**
     * 储存地图静止状态下, 在不同级别下的偏移量值, 当地图发生移动时, 则全部清空
     * <Integer级别, int[]x,y偏移量>
     */
    Hashtable offsetTable;
    
    MapWorker worker;
	
    //单例
    static Map* INSTANCE;
    
    TBool init;
    
private:
    Map();
    
public:
    static Map& GetInstance();
    
private:
    void Init();
    
    
    
	};

#endif
